Model fit

Column

Assumption checks


Something did not work as expected. Please file an issue at https://github.com/easystats/easystats/issues/ and post
  the following output:
  
``check_model()` returned following error: replacement has 1 row, data has 0
  
If the error message does not help
  identifying your problem, another reason why `check_model()` failed might be that
  models of class `lm` are not yet
  supported.`

Column

Indices of model fit

Metric Value
AIC -Inf
AICc -Inf
BIC -Inf
R2 1.00
RMSE 0.00

For interpretation of performance metrics, please refer to this documentation.

Parameter estimates

Column

Plot

Column

Tabular summary

Parameter Coefficient 95% CI df
(Intercept) -10.93 0
b n genera metabarcoding 0.20 0
c n genera flower count -8.02e-03 0
period (2) 1.37 0
period (3) -3.80 0
period (4) 5.05 0

To find out more about table summary options, please refer to this documentation.

Predicted Values

Column

Plot

Column

Tabular summary

Model-based Expectation
b_n_genera_metabarcoding Predicted SE 95% CI
1.07 -11.18 0.00
22.84 -6.91 0.00
44.62 -2.64 0.00
66.39 1.63 0.00
88.17 5.90 0.00
109.94 10.17 0.00
131.72 14.44 0.00
153.49 18.71 0.00
175.27 22.98 0.00
197.04 27.25 0.00

Variable predicted: a_n_genera_interactions

Predictors modulated: b_n_genera_metabarcoding

Predictors controlled: c_n_genera_flower_count (58), period (1)

Model-based Expectation
c_n_genera_flower_count Predicted SE 95% CI
-24.15 6.55 0.00
-3.74 6.39 0.00
16.67 6.23 0.00
37.09 6.06 0.00
57.50 5.90 0.00
77.91 5.73 0.00
98.33 5.57 0.00
118.74 5.41 0.00
139.15 5.24 0.00
159.57 5.08 0.00

Variable predicted: a_n_genera_interactions

Predictors modulated: c_n_genera_flower_count

Predictors controlled: b_n_genera_metabarcoding (88), period (1)

Model-based Expectation
period Predicted SE 95% CI
1.00 5.90 0.00
2.00 7.27 0.00
3.00 2.09 0.00
4.00 10.95 0.00
5.00 5.90 0.00
6.00 5.90 0.00

Variable predicted: a_n_genera_interactions

Predictors modulated: period

Predictors controlled: b_n_genera_metabarcoding (88), c_n_genera_flower_count (58)

Text reports

Column

Textual summary

We fitted a linear model (estimated using OLS) to predict a_n_genera_interactions with b_n_genera_metabarcoding, c_n_genera_flower_count and period (formula: a_n_genera_interactions ~ b_n_genera_metabarcoding + c_n_genera_flower_count + factor(period)). The model explains a statistically NA and substantial proportion of variance (R2 = 1.00, F(5, 0) = , ). The model’s intercept, corresponding to b_n_genera_metabarcoding = 0, c_n_genera_flower_count = 0 and period = 0, is at -10.93 (t(0) = ). Within this model:

  • The effect of b n genera metabarcoding is statistically NA and positive (beta = 0.20, t(0) = ; Std. beta = 0.91, )
  • The effect of c n genera flower count is statistically NA and negative (beta = -8.02e-03, t(0) = ; Std. beta = -0.04, )
  • The effect of period (2) is statistically NA and positive (beta = 1.37, t(0) = ; Std. beta = 0.29, )
  • The effect of period (3) is statistically NA and negative (beta = -3.80, t(0) = ; Std. beta = -0.81, )
  • The effect of period (4) is statistically NA and positive (beta = 5.05, t(0) = ; Std. beta = 1.08, )
  • The effect of period (6) is statistically NA and positive (beta = 0.20, t(0) = ; Std. beta = 0.91, )

Standardized parameters were obtained by fitting the model on a standardized version of the dataset. 95% Confidence Intervals (CIs) and p-values were computed using a Wald t-distribution approximation. The model explains a statistically NA and substantial proportion of variance (R2 = 1.00, F(5, 0) = , )

Column

Model information

---
title: "Regression model summary from `{easystats}`"
output:
  flexdashboard::flex_dashboard:
    theme:
      version: 4
      # bg: "#101010"
      # fg: "#FDF7F7"
      primary: "#0054AD"
      base_font:
        google: Prompt
      code_font:
        google: JetBrains Mono
params:
  model: model
  check_model_args: check_model_args
  parameters_args: parameters_args
  performance_args: performance_args
---

```{r setup, include=FALSE}
library(flexdashboard)
library(easystats)

# Since not all regression model are supported across all packages, make the
# dashboard chunks more fault-tolerant. E.g. a model might be supported in
# `{parameters}`, but not in `{report}`.
#
# For this reason, `error = TRUE`
knitr::opts_chunk$set(
  error = TRUE,
  out.width = "100%"
)

# helper function for printing `{report}` outputs
bracket_to_parantheses <- function(text) {
  gsub("]", ")", gsub("[", "(", text, fixed = TRUE), fixed = TRUE)
}
```

```{r easydashboard-1}
# Get user-specified model data
model <- params$model

# Is it supported by `{easystats}`? Skip evaluation of the following chunks if not.
is_supported <- insight::is_model_supported(model)

if (!is_supported) {
  unsupported_message <- sprintf(
    "Unfortunately, objects of class `%s` are not yet supported in {easystats}.\n
    For a list of supported models, see `insight::supported_models()`.",
    class(model)[1]
  )
}
```


Model fit
=====================================

Column {data-width=700}
-----------------------------------------------------------------------

### Assumption checks

```{r check-model, eval=is_supported, fig.height=10, fig.width=10}
check_model_args <- c(list(model), params$check_model_args)
# add verbose, if not done yet
if (is.null(check_model_args$verbose)) check_model_args$verbose <- FALSE
tryCatch(
  {
    do.call(performance::check_model, check_model_args)
  },
  error = function(e) {
    cat(insight::format_message(
      "\nSomething did not work as expected. Please file an issue at {.url https://github.com/easystats/easystats/issues/} and post the following output:",
      paste0("\n`", e$message, "`")
    ))
  }
)
```

```{r easydashboard-2, eval=!is_supported}
cat(unsupported_message)
```

Column {data-width=300}
-----------------------------------------------------------------------

### Indices of model fit

```{r easydashboard-3, eval=is_supported}
# {performance}
performance_args <- c(list(model), params$performance_args)
# add verbose, if not done yet
if (is.null(performance_args$verbose)) performance_args$verbose <- FALSE
table_performance <- do.call(performance::performance, performance_args)
print_md(table_performance, layout = "vertical", caption = NULL)
```


```{r easydashboard-4, eval=!is_supported}
cat(unsupported_message)
```

For interpretation of performance metrics, please refer to <a href="https://easystats.github.io/performance/reference/model_performance.html" target="_blank">this documentation</a>.

Parameter estimates
=====================================

Column {data-width=550}
-----------------------------------------------------------------------

### Plot

```{r dot-whisker, eval=is_supported}
# `{parameters}`
parameters_args <- c(list(model), params$parameters_args)
# add verbose, if not done yet
if (is.null(parameters_args$verbose)) parameters_args$verbose <- FALSE
table_parameters <- do.call(parameters::parameters, parameters_args)

plot(table_parameters)
```


```{r easydashboard-5, eval=!is_supported}
cat(unsupported_message)
```

Column {data-width=450}
-----------------------------------------------------------------------

### Tabular summary

```{r easydashboard-6, eval=is_supported}
print_md(table_parameters, caption = NULL)
```


```{r easydashboard-7, eval=!is_supported}
cat(unsupported_message)
```

To find out more about table summary options, please refer to <a href="https://easystats.github.io/parameters/reference/model_parameters.html" target="_blank">this documentation</a>.


Predicted Values
=====================================

Column {data-width=600}
-----------------------------------------------------------------------

### Plot

```{r expected-values, eval=is_supported, fig.height=10, fig.width=10}
# {modelbased}
int_terms <- find_interactions(model, component = "conditional", flatten = TRUE)
con_terms <- find_variables(model)$conditional

if (is.null(int_terms)) {
  model_terms <- con_terms
} else {
  model_terms <- clean_names(int_terms)
  int_terms <- unique(unlist(strsplit(clean_names(int_terms), ":", fixed = TRUE)))
  model_terms <- c(model_terms, setdiff(con_terms, int_terms))
}

# check some exceptions here: logistic regression models with factor response
# usually require the response to be included in the model, else `get_modelmatrix()`
# fails, which is required to compute SE/CI for `get_predicted()`
response <- find_response(model)
minfo <- model_info(model)
model_data <- get_data(model)
include_response <- minfo$is_binomial && minfo$is_logit && is.factor(model_data[[response]])

text_modelbased <- tryCatch(
  {
    lapply(unique(model_terms), function(i) {
      dgrid <- get_datagrid(
        model,
        by = i,
        range = "grid",
        preserve_range = FALSE,
        verbose = FALSE,
        include_response = include_response
      )
      estimate_expectation(model, data = dgrid, verbose = FALSE)
    })
  },
  error = function(e) {
    cat(insight::format_message(
      "\nSomething did not work as expected. Please file an issue at {.url https://github.com/easystats/easystats/issues/} and post the following output:",
      paste0("\n`", e$message, "`")
    ))
    NULL
  }
)

if (!is.null(text_modelbased)) {
  ggplot2::theme_set(theme_modern())
  # all_plots <- lapply(text_modelbased, function(i) {
  #   out <- do.call(visualisation_recipe, c(list(i), modelbased_args))
  #   plot(out) + ggplot2::ggtitle("")
  # })
  all_plots <- lapply(text_modelbased, function(i) {
    out <- visualisation_recipe(i, show_data = "none")
    plot(out) + ggplot2::ggtitle("")
  })

  see::plots(all_plots, n_columns = round(sqrt(length(text_modelbased))))
}
```


```{r easydashboard-8, eval=!is_supported}
cat(unsupported_message)
```

Column {data-width=400}
-----------------------------------------------------------------------

### Tabular summary

```{r easydashboard-9, eval=is_supported, results="asis"}
if (!is.null(text_modelbased)) {
  for (i in text_modelbased) {
    tmp <- print_md(i)
    tmp <- gsub("Variable predicted", "\nVariable predicted", tmp, fixed = TRUE)
    tmp <- gsub("Predictors modulated", "\nPredictors modulated", tmp, fixed = TRUE)
    tmp <- gsub("Predictors controlled", "\nPredictors controlled", tmp, fixed = TRUE)
    print(tmp)
  }
}
```


```{r easydashboard-10, eval=!is_supported}
cat(unsupported_message)
```


Text reports
=====================================

Column {data-width=500}
-----------------------------------------------------------------------

### Textual summary

```{r easydashboard-11, eval=is_supported, results='asis', collapse=TRUE}
# {report}
text_report <- tryCatch(
  {
    report(model, verbose = FALSE)
  },
  error = function(e) {
    cat(insight::format_message(
      "\nSomething did not work as expected. Please file an issue at {.url https://github.com/easystats/easystats/issues/} and post the following output:",
      paste0("\n`", e$message, "`")
    ))
    NULL
  }
)


text_report_performance <- tryCatch(
  {
    report_performance(model, verbose = FALSE)
  },
  error = function(e) {
    cat(insight::format_message(
      "\nSomething did not work as expected. Please file an issue at {.url https://github.com/easystats/easystats/issues/} and post the following output:",
      paste0("\n`", e$message, "`")
    ))
    NULL
  }
)

if (!is.null(text_report)) {
  cat(bracket_to_parantheses(text_report))
  cat("\n")
}

if (!is.null(text_report_performance)) {
  cat(bracket_to_parantheses(text_report_performance))
}
```


```{r easydashboard-12, eval=!is_supported}
cat(unsupported_message)
```

Column {data-width=500}
-----------------------------------------------------------------------

### Model information

```{r easydashboard-13, eval=is_supported}
model_info_data <- insight::model_info(model, verbose = FALSE)
model_info_data <- datawizard::data_to_long(as.data.frame(insight::compact_list(model_info_data)))

DT::datatable(model_info_data)
```

```{r easydashboard-14, eval=!is_supported}
cat(unsupported_message)
```